/*
 * RollingFileAppender.hh
 *
 * See the COPYING file for the terms of usage and distribution.
 */

#ifndef _LOG4CPP_ROLLINGFILEAPPENDER_HH
#define _LOG4CPP_ROLLINGFILEAPPENDER_HH

#include <log4cpp/Portability.hh>
#include <log4cpp/FileAppender.hh>
#include <string>
#include <stdarg.h>

LOG4CPP_NS_BEGIN

/**
   RollingFileAppender is a FileAppender that rolls over the logfile once
   it has reached a certain size limit.
   @since 0.3.1
   **/
class LOG4CPP_EXPORT RollingFileAppender : public FileAppender {
public:
    RollingFileAppender(const std::string& name,
        const std::string& fileName,
        size_t maxFileSize = 10 * 1024 * 1024,
        unsigned int maxBackupIndex = 1,
        bool append = true,
        mode_t mode = 00644);

    virtual void setMaxBackupIndex(unsigned int maxBackups);
    virtual unsigned int getMaxBackupIndex() const;
    virtual void setMaximumFileSize(size_t maxFileSize);
    virtual size_t getMaxFileSize() const;

    virtual void rollOver();

protected:
    virtual void _append(const LoggingEvent& event);

    unsigned int _maxBackupIndex;
    unsigned short int _maxBackupIndexWidth;	// keep constant index width by zeroing leading positions

    size_t _maxFileSize;
private:
    // suppress assignment operator
    RollingFileAppender & operator=(const RollingFileAppender &);

};
LOG4CPP_NS_END


#endif // _LOG4CPP_ROLLINGFILEAPPENDER_HH
